Jackson-এ PropertyNamingStrategy বা PropertyNamingStrategies ব্যবহার করে Java ফিল্ডের নাম এবং JSON ফিল্ডের নামের মধ্যে কাস্টম ম্যাপিং তৈরি করা যায়। এটি বিশেষভাবে দরকার হয় যখন JSON ফিল্ডের নাম Java ফিল্ডের নামের থেকে ভিন্ন হয় বা নির্দিষ্ট নামকরণের কনভেনশন (যেমন snake_case বা kebab-case) অনুসরণ করতে হয়।
Property Naming Strategies
Jackson আপনাকে বিভিন্ন বিল্ট-ইন নামকরণ কৌশল প্রদান করে:
SNAKE_CASE: ফিল্ড নামগুলিকে snake_case-এ রূপান্তর করে।UPPER_CAMEL_CASE: ফিল্ড নামগুলিকে UpperCamelCase-এ রূপান্তর করে।KEBAB_CASE: ফিল্ড নামগুলিকে kebab-case-এ রূপান্তর করে।LOWER_CASE: ফিল্ড নামগুলিকে lowercase-এ রূপান্তর করে।- Custom Strategy: নিজের কাস্টম স্ট্র্যাটেজি তৈরি করা যায়।
কোড উদাহরণ
Step 1: Maven Dependency
প্রথমে, Jackson লাইব্রেরি আপনার প্রোজেক্টে যোগ করুন:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
Step 2: একটি ডেটা মডেল তৈরি করুন
Java ফিল্ডগুলোর নাম camelCase ফরম্যাটে থাকবে।
public class Person {
private String firstName;
private String lastName;
private int age;
// Constructors
public Person() {}
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
// Getters and Setters
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Step 3: ObjectMapper-এ Naming Strategy সেট করুন
PropertyNamingStrategies ব্যবহার করে ফিল্ড নামের কনভেনশন পরিবর্তন করুন।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
public class PropertyNamingStrategyExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Set SNAKE_CASE naming strategy
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
// Create a Person object
Person person = new Person("John", "Doe", 30);
// Serialize: Java Object to JSON
String json = objectMapper.writeValueAsString(person);
System.out.println("Serialized JSON with SNAKE_CASE:");
System.out.println(json);
// Deserialize: JSON to Java Object
String jsonInput = """
{
"first_name": "Jane",
"last_name": "Smith",
"age": 25
}
""";
Person deserializedPerson = objectMapper.readValue(jsonInput, Person.class);
System.out.println("Deserialized Object:");
System.out.println(deserializedPerson.getFirstName() + " " + deserializedPerson.getLastName());
}
}
Output
Serialized JSON
{
"first_name": "John",
"last_name": "Doe",
"age": 30
}
Deserialized Object
Jane Smith
Custom Property Naming Strategy
আপনার প্রয়োজন অনুযায়ী কাস্টম স্ট্র্যাটেজি তৈরি করতে পারেন:
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.introspect.AnnotatedField;
public class CustomNamingStrategy extends PropertyNamingStrategy {
@Override
public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
return "custom_" + defaultName; // Add "custom_" prefix to every field
}
}
এই কাস্টম স্ট্র্যাটেজি ব্যবহার করতে ObjectMapper-এ সেট করুন:
objectMapper.setPropertyNamingStrategy(new CustomNamingStrategy());
Jackson-এর PropertyNamingStrategy এবং PropertyNamingStrategies ব্যবহার করে JSON ফিল্ডের নাম সহজেই কাস্টমাইজ করা যায়।
মূল সুবিধা:
- Standard Naming Conventions:
snake_case,kebab-caseইত্যাদি সহজেই সামঞ্জস্যপূর্ণ করা। - Custom Mapping: নিজের প্রয়োজন মতো কাস্টম স্ট্র্যাটেজি ব্যবহার।
- Flexible Integration: বিভিন্ন JSON ফরম্যাটের সাথে সহজে কাজ করা।
এটি REST API, ডেটা ট্রান্সফার অবজেক্ট (DTO), এবং অন্যান্য JSON ইন্টিগ্রেশন ক্ষেত্রে অত্যন্ত কার্যকর।
Read more